package com.medassistent.gui;

import java.util.Calendar;
import java.util.List;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
import android.telephony.SmsManager;

import com.medassistent.source.Horario;
import com.medassistent.source.Medicamento;
import com.medassistent.source.Paciente;

public class MyService extends Service{

	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
		
		List<Horario> listaDeHorarios = Horario.listAll(Horario.class);
		Calendar c  = Calendar.getInstance();
		Calendar cAux  = Calendar.getInstance();
		for(Horario h : listaDeHorarios){
			
			if(ProximosASeremMedicados.comparaTempo(h.getHora(), h.getMinuto()) < 0 && h.isAlarme() == false){
				h.setAlarme(true);
			}
			
			if(ProximosASeremMedicados.comparaTempo(h.getHora(), h.getMinuto()) == 0 ){
				
				if(h.isAtrasado() == false && h.isAlarme() == true){
					h.setAtrasado(true);
					h.save();
					ProximosASeremMedicados.atualizaProximosPacientes();
					criaNotificacao(h, 0);
				}
			}
			
			cAux.set(Calendar.HOUR_OF_DAY, h.getHora());
			cAux.set(Calendar.MINUTE, h.getMinuto());
			
			if (h.isAtrasado()) {
				Medicamento med = Medicamento.findById(Medicamento.class, h.getId_remedio());
				Paciente p = Paciente.findById(Paciente.class, med.getIdPaciente());
				if (p.isAvisarAtraso()) {
					if ((c.getTimeInMillis() - cAux.getTimeInMillis())/60000 >= p.getToleranciaAtraso() ) {
						if (!h.isSmsEnviada()) {

							SmsManager smsManager = SmsManager.getDefault();
							String mensagem = "O medicamento "+med.getNome()+" do paciente "+p.getNome()+" esta atrasado em "+p.getToleranciaAtraso()+" minutos"; 
							smsManager.sendTextMessage(p.getTelefoneResponsavel(), null, mensagem, null, null);
						    h.setSmsEnviada(true);
						    h.save();
						}
					}
				}
			}
			
			
		}
		
		return Service.START_STICKY;
	}
	

	
	public void criaNotificacao(Horario h, int minutos) {
		Medicamento med = Medicamento.findById(Medicamento.class, h.getId_remedio());
		Paciente p = Paciente.findById(Paciente.class, med.getIdPaciente());
		String[] dados = 
		{String.valueOf(h.getId()),
		med.getNome() + " " + h.getHora() + ":" + h.getMinuto(),
		p.getNome(),
		" precisa ser medicado",
		"O paciente "};
		
		PendingIntent mAlarmSender = PendingIntent.getBroadcast(this, Integer
				.parseInt("" + h.getId()), (new Intent(this,
				AlarmReceiver.class).putExtra("dados", dados)), 0);
		
		Calendar c = Calendar.getInstance();
		
		c.set(Calendar.HOUR_OF_DAY, h.getHora());
		c.set(Calendar.MINUTE, h.getMinuto());
		
		long firstTime = c.getTimeInMillis();

		AlarmManager am = (AlarmManager) this
				.getSystemService(Context.ALARM_SERVICE);
		am.set(AlarmManager.RTC_WAKEUP, firstTime, mAlarmSender);
	}
	
	
	
	
	
	
	
	
	@Override
	public IBinder onBind(Intent arg0) {
		// TODO Auto-generated method stub
		return null;
	}

}
